The shift from on-premise software towards offering and using software as a service (SaaS) is one of the trends in the current development of the information technology (IT) industry. According to this model, instead of licensing software products that are installed on customer's servers, the customers pay for using software services provided over public or private computer networks. This approach has many advantages, for example, the customers avoid the costs associated with hosting the necessary software applications. The software vendors are also interested in selling software services to ensure regular income without giving up any of the ownership rights of their software. Therefore, in recent years there has been a proliferation of software of all kinds, and even hardware services provided over a network, mainly over the internet.
There are different approaches and solutions for providing software and hardware services over the internet. Typically, the customers do not own the hardware infrastructure and the software applications running on it, and the vendors employ utility computing models similar to the traditional utility services (e.g., electricity, water, etc.). Other vendors bill on a subscription basis. In either case, the customers pay for a service with particular characteristics and quality of service level. For example, when a customer buys a storage space, part of the agreement may be the size and a minimum response time to read and write requests. Similarly, the software services provided by the vendors over networks must comply with a required level of availability. To guarantee the necessary quality of service even at peak moments, the vendors have to ensure sufficient computer power in terms of hardware and software resources per customer.
There is a mutual interest between the vendors and the customers for high rates of the shared resources utilization to minimize idle computing power. The more efficient the usage of the available hardware and software resources, the lower is the pricing of the services provided. As a result, multitenancy architectures are adopted where a single computer system with a single instance of software runs to serve multiple, different customer organizations, e.g., tenants. This way, it is not necessary to setup a separate computer system with a separate instance of the software for each customer. The customers that share the same software and hardware resources are anonymous to each other and have to be completely isolated from one another. The complete isolation between customers is one of the most stringent requirements for providing software or hardware services over the internet. Because of the isolation, a customer is able to manage the consumption of shared resources only according to its needs, without an overview of the demand generated by other customers for the same resources. Hence, the vendors still need to store excessive computing power to handle peak resource consumptions.